"""
封装购物车模块使用的一些工具
"""
from django_redis import get_redis_connection
from meiduo_mall.utils.cookiesecret import CookieSecret


# TODO: 合并购物车
def merge_cart_cookie_to_redis(request, response):
    """
    功能：把cookie购物车合并到redis中
    1、Redis数据库中的购物车数据保留。
    2、如果cookie中的购物车数据在Redis数据库中已存在，将cookie购物车数据覆盖Redis购物车数据。
    3、如果cookie中的购物车数据在Redis数据库中不存在，将cookie购物车数据新增到Redis。
    :param request: 请求对象
    :param response: 响应对象
    :return: 返回响应对象
    """

    # 1、提取cookie购物车数据
    cookie_str = request.COOKIES.get("carts")
    if cookie_str is None:
        cart_dict = {}
    else:
        cart_dict = CookieSecret.loads(cookie_str)
        # cart_dict = {11: {'count': 5, 'selected': True}}

    # 2、把cookie购物车数据合并到redis中
    user = request.user
    redis_conn = get_redis_connection("carts")
    # 获取cookie中商品 sku_id = [1,2....]
    sku_ids = cart_dict.keys()
    for sku_id in sku_ids:
        redis_conn.hset("carts_%s" % user.id, sku_id, cart_dict[sku_id]["count"])
        selected = cart_dict[sku_id]["selected"]
        if selected:
            redis_conn.sadd("selected_%s" % user.id, sku_id)
        else:
            redis_conn.srem("selected_%s" % user.id, sku_id)

    # 3、清除cookie中的购物车数据
    response.delete_cookie("carts")
    return response

